package homework;

import java.io.File;
import java.io.FileInputStream;
import java.io.ObjectInputStream;

/**
 * 将当前目录下的所有obj文件获取到，并进行
 * 反序列化后输出每个用户的信息(直接输出反序
 * 列化后的User对象即可)
 * @author Xiloer
 *
 */
public class Test03 {
    public static void main(String[] args) {
        /*
            1:定位当前目录
            2:获取目录中的所有子项，并逐一遍历
            3:如果该子项是一个文件(isFile())且文件后缀是以.obj结尾的文件则进行下一步，否则略过
            4:每个文件进行反序列化得到对象
            5:反序列化回来的对象要验证是否为User对象(因为课上我们写过一个person.obj里面存放的是Person对象)
            6:输出对象信息
         */
        File dir = new File(".");
        File[] subs = dir.listFiles();//获取当前目录下的所有子项
        for(File sub :subs){
            if(sub.isFile()&&sub.getName().endsWith(".obj")){
                try(FileInputStream fis = new FileInputStream(sub);
                    ObjectInputStream ois = new ObjectInputStream(fis);
                ) {
                    Object obj = ois.readObject();
                    if(obj instanceof User){
                        System.out.println(obj);
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

/*
    提示代码:
	需要用到的语句，尝试按照正确顺序将下列代码并放在main方法中完成需求，
	并在注释中标注每句话的作用，
	//【在这里标注该句代码意义】
    File dir = new File(".");

    //【在这里标注该句代码意义】
    for(File sub :subs){
       ...
    }

    //【在这里标注该句代码意义】
    File[] subs = dir.listFiles();

    //【在这里标注该句代码意义】
    if(sub.isFile()&&sub.getName().endsWith(".obj")){
        ...
    }

    //【在这里标注该句代码意义】
    FileInputStream fis = new FileInputStream(sub);

    //【在这里标注该句代码意义】
    System.out.println(user);

    //【在这里标注该句代码意义】
    ObjectInputStream ois = new ObjectInputStream(fis);

    //【在这里标注该句代码意义】
    User user = (User)obj;

    //【在这里标注该句代码意义】
    Object obj = ois.readObject();

    //【在这里标注该句代码意义】
    if(obj instanceof User){
        ...
    }

 */